/**
 * 宠物选择页面
 * 功能：展示用户宠物列表，支持单选、编辑、删除、新增宠物
 */

const app = getApp();
const apiService = require('../../../utils/api.js');

Page({
  data: {
    // 系统状态栏高度
    statusBarHeight: 0,
    // 宠物列表
    petList: [],
    // 当前选中的宠物ID
    selectedPetId: '',
    // 页面加载状态
    isLoading: true,
    // 来源页面信息
    fromPage: '',
    
    // 导航栏滚动状态
    scrollY: 0,
    navbarOpacity: 0,  // 导航栏背景透明度 (0-1)
    navbarTextColor: '#FFFFFF' // 导航栏文字颜色
  },

  onLoad(options) {
    console.log('宠物选择页面加载', options)
    
    // 初始化 DataManager
    this.dataManager = app.dataManager;
    
    // 获取系统信息
    this.getSystemInfo()
    
    // 获取来源页面信息
    if (options.from) {
      this.setData({
        fromPage: options.from
      })
    }
    
    // 获取传入的已选中宠物ID
    if (options.selectedPetId) {
      this.setData({
        selectedPetId: options.selectedPetId
      })
    }
    
    // 加载宠物列表
    this.loadPetList()
  },

  onShow() {
    console.log('[宠物选择] 页面显示，重新加载宠物列表')
    // 每次显示页面时重新加载数据（处理从编辑页面返回的情况）
    this.loadPetList()
  },

  /**
   * 获取系统信息
   */
  getSystemInfo() {
    wx.getSystemInfo().then(res => {
      this.setData({
        statusBarHeight: res.statusBarHeight || 44
      })
    }).catch(error => {
      console.error('获取系统信息失败:', error)
      this.setData({
        statusBarHeight: 44
      })
    })
  },

  /**
   * 加载宠物列表（强制刷新缓存）
   */
  async loadPetList() {
    try {
      console.log('[宠物选择] 开始加载宠物列表，强制刷新缓存');
      wx.showLoading({
        title: '加载中...'
      })

      // 使用 DataManager 获取宠物列表，强制刷新缓存
      const petData = await this.dataManager.getPetList(true);
      console.log('[宠物选择] 获取到宠物数据:', petData);
      console.log('[宠物选择] 宠物数据长度:', petData ? petData.length : 0);
      if (petData && petData.length > 0) {
        // 转换数据格式以适配页面显示，同时保留原始数据
			const petList = petData.map(pet => ({
				id: pet._id,
				nickname: pet.name,
				gender: pet.gender === '公' ? 'male' : 'female',
				breed: pet.species || '未知品种',
				age: pet.birthday ? this.calculateAge(pet.birthday) : '未知',
				weight: `${pet.weight || 0}kg`,
				avatar: pet.avatar || ((pet.category === '狗狗' || /狗/.test(pet.category || '')) ? '/assets/common/img_dog_avatar_default.png' : '/assets/common/img_cat_avatar_default.png'),
				// 保存原始数据用于编辑
				rawData: pet
			}));

        // 如果没有选中的宠物，默认选中第一个
        let selectedPetId = this.data.selectedPetId;
        if (!selectedPetId && petList.length > 0) {
          selectedPetId = petList[0].id;
        }

        console.log('[宠物选择] 准备更新页面数据，宠物列表长度:', petList.length);
        console.log('[宠物选择] 选中的宠物ID:', selectedPetId);
        this.setData({
          petList: petList,
          selectedPetId: selectedPetId,
          isLoading: false
        });
        console.log('[宠物选择] 页面数据更新完成');
      } else {
        this.setData({
          petList: [],
          isLoading: false
        });
        wx.showToast({
          title: '暂无宠物信息',
          icon: 'none'
        });
      }

      wx.hideLoading();
    } catch (error) {
      console.error('加载宠物列表失败:', error);
      wx.hideLoading();
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      });
      this.setData({
        isLoading: false
      });
    }
  },

  /**
   * 计算年龄
   */
  calculateAge(timestamp) {
    const now = new Date();
    const birth = new Date(timestamp * 1000);
    const ageInMonths = (now.getFullYear() - birth.getFullYear()) * 12 + (now.getMonth() - birth.getMonth());
    
    if (ageInMonths < 12) {
      return `${ageInMonths}个月`;
    } else {
      const years = Math.floor(ageInMonths / 12);
      const months = ageInMonths % 12;
      return months > 0 ? `${years}岁${months}个月` : `${years}岁`;
    }
  },

  /**
   * 返回上一页
   */
  onBack() {
    const pages = getCurrentPages()
    if (pages.length > 1) {
      wx.navigateBack({
        delta: 1
      })
    } else {
      // 没有上一页时跳转到首页
      wx.switchTab({
        url: '/pages/home/index/index'
      })
    }
  },

  /**
   * 选择宠物
   */
  onSelectPet(e) {
    const { petId } = e.currentTarget.dataset
    console.log('选择宠物:', petId)
    
    this.setData({
      selectedPetId: petId
    })
    
    // 触觉反馈
    wx.vibrateShort({
      type: 'light'
    })
  },

  /**
   * 编辑宠物
   */
  onEditPet(e) {
    const pet = e.currentTarget.dataset.pet;
    console.log('编辑宠物:', pet);
    
    if (!pet || !pet.rawData) {
      console.error('宠物数据不完整:', pet);
      wx.showToast({
        title: '宠物数据加载中，请稍后重试',
        icon: 'none'
      });
      return;
    }
    
    const rawData = pet.rawData;
    
    // 将宠物数据转换为编辑页面需要的格式
    const petParams = {
      id: pet.id,
      avatar: rawData.avatar || '',
      nickname: rawData.name || '',
      category: rawData.category || (rawData.type === '猫猫' ? 'cat' : 'dog'),
      breed: rawData.species || '',
      gender: pet.gender, // 已经是 'male'/'female'
      birthDate: rawData.birthday ? new Date(rawData.birthday * 1000).toISOString().split('T')[0] : '',
      weight: String(rawData.weight || '0'),
      mode: 'edit'
    };
    
    console.log('准备跳转到编辑页面，宠物数据:', petParams);
    
    // 将参数编码并跳转到编辑页面
    const encodedParams = encodeURIComponent(JSON.stringify(petParams));
    wx.navigateTo({
      url: `/pages/pet/add-pet/index?data=${encodedParams}`,
      success: () => {
        console.log('跳转到宠物编辑页面成功');
      },
      fail: (error) => {
        console.error('跳转到宠物编辑页面失败:', error);
        wx.showToast({
          title: '页面跳转失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 删除宠物
   */
  onDeletePet(e) {
    const { petId, petName } = e.currentTarget.dataset
    console.log('删除宠物:', petId, petName)
    
    wx.showModal({
      title: '删除确认',
      content: `是否确认删除宠物"${petName}"？`,
      confirmText: '删除',
      confirmColor: '#FF4757',
      success: (res) => {
        if (res.confirm) {
          this.deletePet(petId)
        }
      }
    })
  },

  /**
   * 执行删除宠物
   */
  async deletePet(petId) {
    try {
      wx.showLoading({
        title: '删除中...'
      })

      const result = await apiService.deletePet(petId);
      if (result.success) {
        // 清除宠物列表缓存，强制刷新
        console.log('删除成功，清除宠物列表缓存');
        await apiService.getPetList(true).catch(err => {
          console.warn('刷新宠物列表缓存失败:', err);
        });
        
        // 从列表中移除该宠物
        const newPetList = this.data.petList.filter(pet => pet.id !== petId);
        
        // 如果删除的是当前选中的宠物，重新选择
        let selectedPetId = this.data.selectedPetId;
        if (selectedPetId === petId) {
          selectedPetId = newPetList.length > 0 ? newPetList[0].id : '';
        }

        this.setData({
          petList: newPetList,
          selectedPetId: selectedPetId
        });

        wx.hideLoading();
        wx.showToast({
          title: '删除成功',
          icon: 'success'
        });
      } else {
        throw new Error(result.message);
      }

    } catch (error) {
      console.error('删除宠物失败:', error);
      wx.hideLoading();
      wx.showToast({
        title: error.message || '删除失败',
        icon: 'none'
      });
    }
  },

  /**
   * 新增宠物
   */
  onAddPet() {
    console.log('新增宠物')
    wx.navigateTo({
      url: '/pages/pet/add-pet/index?mode=add'
    })
  },

  /**
   * 确认选择
   */
  onConfirm() {
    if (!this.data.selectedPetId) {
      wx.showToast({
        title: '请选择宠物',
        icon: 'none'
      })
      return
    }

    const selectedPet = this.data.petList.find(pet => pet.id === this.data.selectedPetId)
    console.log('确认选择宠物:', selectedPet)

    // 将选中的宠物信息保存到全局数据
    const app = getApp()
    app.globalData.selectedPet = selectedPet
    
    console.log('保存选中宠物到全局数据:', selectedPet)

    // 将选中的宠物信息传递给上一页（保持原有逻辑兼容性）
    const pages = getCurrentPages()
    if (pages.length > 1) {
      const prevPage = pages[pages.length - 2]
      if (prevPage && typeof prevPage.onPetSelected === 'function') {
        prevPage.onPetSelected(selectedPet)
      }
    }

    // 返回上一页
    wx.navigateBack({
      delta: 1,
      success: () => {
        console.log('返回上一页成功，已保存宠物选择')
      },
      fail: (error) => {
        console.error('返回上一页失败:', error)
      }
    })
  },

  /**
   * 阻止事件冒泡
   */
  onStopPropagation() {
    // 空函数，用于阻止事件冒泡
  },

  /**
   * 分享页面
   */
  /**
   * 页面滚动监听
   */
  onPageScroll(e) {
    const scrollY = e.scrollTop;
    
    // 计算导航栏背景透明度，滚动距离0-100px内从透明变为不透明
    const maxScrollDistance = 100; // 滚动距离阈值（像素）
    const opacity = Math.min(scrollY / maxScrollDistance, 1);
    
    // 计算文字颜色，透明度达到0.5时开始变黑
    const textColor = opacity >= 0.5 ? '#120E0C' : '#333333';
    
    // 只有在透明度或文字颜色发生变化时才更新
    if (this.data.navbarOpacity !== opacity || this.data.navbarTextColor !== textColor) {
      this.setData({
        scrollY: scrollY,
        navbarOpacity: opacity,
        navbarTextColor: textColor
      });
    }
  },

  onShareAppMessage() {
    return {
      title: '选择宠物',
      path: '/pages/pet/select-list/index'
    }
  }
})
